import {
  INFO_UPDATE,
  A_INFO_UPDATE
} from "./event-type";

export default {
  // 在actions中编写方法, 跟在mutations中编写方法差不多, 但是方法中传入的第一个参数并不是state, 而是 context
  // context意为 上下文, 可以理解为store这个对象
  // 如果想要传入参数, 也是跟mutations中的方法一样, 也是有普通方式, 和传入一个包含type属性的对象方式
  /* [A_INFO_UPDATE](context) {
    setTimeout(() => {
      // 注意, 不能再actions的方法中更新store的状态, 要记住一点, 更新store状态的唯一方式是mutations中的方法
      // 所以这里做的操作是使用 commit 提交
      context.commit(INFO_UPDATE)
    },1000)
  } */

  // 需求, 需要异步操作完成后, 给组件返回一个信息
  // 第一种方式, 通过组件传参的时候传入一个函数, 在actions中进行异步操作, 异步操作完成后回调这个函数
  /* [A_INFO_UPDATE](context, payload) {
    setTimeout(() => {
      // 注意, 不能再actions的方法中更新store的状态, 要记住一点, 更新store状态的唯一方式是mutations中的方法
      // 所以这里做的操作是使用 commit 提交
      context.commit(INFO_UPDATE)
      console.log(payload.message);
      payload.finsh();
    },1000)
  } */

  // 第一种方式不够优雅, vue官方推荐我们通过 return 一个new Promise 对象来实现
  [A_INFO_UPDATE](context, payload) {
    // 在这里return 出去的是回到组件那里的
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        context.commit(INFO_UPDATE)
        console.log(payload.message);
        resolve("完成了完成了");
      }, 1000)
    })
  }
}
